Electronic systems and circuits have made a significant contribution towards the advancement of modern society and are utilized in a number of applications to achieve advantageous results. Numerous electronic technologies such as digital computers, calculators, audio devices, video equipment, and telephone systems have facilitated increased productivity and reduced costs in analyzing and communicating information in most areas of business, science, education and entertainment. Systems providing these advantageous results often involve emulation of a virtual “machine” for processing information. Emulation application information directing processing activities is often revised or updated for a variety of reasons. However, revising and updating existing emulation application information can be difficult and are often problematic.
Numerous electronic devices include processors that operate by executing programs comprising a series of instructions. These programs and their series of instructions are typically referred to as software. Software instructions include directions that guide processor device functions in the performance of useful tasks. The software code is often expressed in different configurations or languages. Source code is usually expressed in a language at one level and compiled into a different level expression. For example, emulation or virtual language (e.g., Java) source code is typically compiled intobytecode.
There can be significant differences between different types of code expression. Emulation languages (e.g., Java) typically offer flexible programming advantages. Emulation language code is usually more portable and mobile between system platforms than code that is native to a particular single platform. However, native languages usually offer significant potential performance advantages. For example, native languages can usually be optimized for particular system hardware architectures (e.g., an embedded processor) in a manner that significantly increases capability and speed. Native languages also often permit implementation of specialized functionality or features (e.g., utilization of embedded system functionality and features).
Java is one example of a high level emulation language that offers significant advantages over native languages. Java characteristics of platform independence, security, and network mobility make it particularly suitable for emerging distributed network computing environments. A Java program typically runs on a Java platform that interacts with the underlying computer system resources through application program interfaces (APIs). Since there is significant diversity of interfaces available for interacting between a Java program and various underlying operating systems, Java is relatively platform independent. This enables Java to be an effective language for distributed or network environment programming without the need for extensive specialized adaptation to the variety of devices potentially included in a network system. While Java applications can provide significant advantages, revising or updating a Java application in a proper manner can be difficult.
Emulation applications usually have to be revised or updated to address advances in technology and/or provide additional desired features. Revising or updating a Java application can gives rise to a number of potential problems. For example, maintaining data consistency can be a problem when revising a Java application on the fly. Java applications usually have multiple threads running simultaneously in various stages of execution. If the instructions included in a Java application change in the middle of various execution stages, the processed information may not be consistent and can cause erroneous results. The number of times and intervals at which emulation application information (e.g., Java classes) gets updated can vary and often depends on the application type. Some applications involve frequent and numerous updates.
One traditional approach to attempt data consistency or coherency is to shut down an emulation virtual machine before a revision or update to emulation application information is made. For example, Java virtual machines are shut down stopping current application processing and the new classes (e.g., revised classes) are reloaded in place of the old ones. This usually requires the entire application to be loaded again and processing started over. This is particularly inconvenient if the emulation virtual machine has been running an application for a relatively long period of time. The relative nature of the time between revision is usually determined based upon the application. For example, if an application performs numerous operations in a second, several minutes can be a relatively long lived application with respect to application processing. If the emulation virtual machine has been running for a while there can be a significant number of application threads that involve information “reprocessing”.
Revision problems can be significant on embedded systems because they typically run for a relatively long time and starting processing over can be redundant and wasteful. For example, in a printer implementation, emulation applications (e.g., a Java application) can run for a significant time and a lot of emulation application information can be loaded in the virtual machine. To revise or update the printer emulation information, the emulation virtual machine (e.g., a Java virtual machine) typically has to be shut down resulting in a loss of processed information. Restarting the emulation virtual machine includes loading the emulation classes and starting the processing over from the beginning. Another example is a handheld device (e.g., a personal digital assistant) which includes emulation applications and the emulation virtual machine is basically the base platform and underlying operating system. Again, shutting down the emulation virtual machine and restarting can involve significant “reprocessing” of information.